Conversation
…13 (task 4.1a) Wave 4.1 opening move. Fork's on-disk src/Illuminate/Contracts/ (45 files) is replaced by the real illuminate/contracts v13.32.0 package. Mechanism correction to MIGRATION-SPLIT-MAP.md §3a: the "copy-source-EARLY" premise (composer require rejected because the package is fork-provided) does NOT hold for contracts/collections/macroable/conditionable/reflection/pipeline — none of them are in fork's `replace` block (27 entries). Plain `composer require` works; only the shadowing on-disk tree needs deleting. Two fork concretes had to be converged onto the newer package interfaces: - Container: add $scopedInstances + scoped()/scopedIf() (v13 interface) - ResponseFactory: 10 throwaway glue methods (noContent, file, streamJson, streamDownload, eventStream, redirect*). Fork RF is deleted when illuminate/routing v13 swaps in, so these are minimal — missing deps (Js/StreamedEvent/StreamedResponseException/report) inlined, redirect* resolves 'redirect' lazily from the container. Verified: contracts resolve from vendor/illuminate/contracts (not src/), suite 1647 green / 3659 assertions.
…k 4.1b) Second Wave 4.1 slice, same mechanism as 4.1a: neither package is in fork's `replace` block, so plain composer require works. illuminate/macroable + illuminate/conditionable both autoload "Illuminate\Support\" => "" — the same prefix fork uses for src/Illuminate/Support/. Composer resolves longest-prefix-first with fallback, so the packages only shadow what they actually ship. Verified: Traits\Macroable -> vendor/illuminate/macroable Traits\Conditionable -> vendor/illuminate/conditionable HigherOrderWhenProxy -> vendor/illuminate/conditionable Collection / Str / Reflector -> src/Illuminate/Support (fork, untouched) Three fork files are now dead (shadowed) and deleted. MacroableTrait.php is kept as the BC alias shim (drops at the flip). Suite 1647 green / 3659 assertions.
…4.1c) Third Wave 4.1 slice. illuminate/collections autoloads "Illuminate\Support\" => "" plus files [functions.php, helpers.php], so it shadows exactly the 10 fork files it duplicates; the other 53 under src/Illuminate/Support survive (longest-prefix-first with fallback). Eight of those were classes and are deleted; helpers.php/functions.php are KEPT because 54 of the fork's 59 global helpers are fork-only — both sides guard every function with function_exists, so the 5 overlapping names (data_get, enum_value, head, last, value) resolve to the package's, which now load first. Task 3.3b had already converged Collection/Arr to L13 shape, so the swap came down to four 4.2-only APIs the package does not have. Swept every Arr:: call in fork src against v13's Arr (59 methods) — only build/fetch were missing: - array_build()/array_fetch() globals now inline their bodies instead of delegating to the removed Arr::build/Arr::fetch. Consumers are Routing\Route and Database\Eloquent\Collection, plus seven app-side test call sites of array_fetch. - Database\Query\Builder::pluck() now uses Collection::pluck (upstream's own implementation) instead of the removed Collection::fetch. - Eloquent\Collection::fetch() keeps its body (it rides the array_fetch global) but loses its #[\Override], which is now false since v13's base Collection dropped fetch(). Found by sweeping all 177 #[\Override] in fork src — 100 files clean, this was the only mismatch. Collection::lists() has zero callers in fork src and zero in the app, so the four tests covering it move to pluck()/->all() (names follow upstream). Two Arr tests covered v13-differing behaviour and were converged: Arr::exists on an Enumerable now goes through Collection::has (array_key_exists semantics), and Arr::shuffle lost its seed parameter so testShuffleWithSeed is dropped. The test stub TestAccessorEloquentTestStub gains the __isset upstream has. Suite 1646 green / 3658 assertions.
Last copy-source seed from MIGRATION-SPLIT-MAP §3a. Fork's 947-byte src/Illuminate/Support/Reflector.php stub (a single getParameterClassName, itself copied from Container\Util) is shadowed by the real package, which is a strict superset (getClassAttribute(s), getParameterClassNames, isCallable, isParameterSubclassOf, isParameterBackedEnumWithStringBackingType). The package's helpers.php defines lazy()/proxy(); no overlap with the fork's globals, and every function is function_exists-guarded on both sides. Suite 1646 green / 3658 assertions. Seeds complete (Contracts, Macroable, Conditionable, Collections, Reflection). Next is §1: the eleven-member SCC-1 window.
…4.1, SCC-1 container-prep) Prepares the SCC-1 atomic window: v13's illuminate/container has singleton() but no bindShared()/share(). Migrate all 84 fork callers (32 service providers) from ->bindShared() to ->singleton() while the fork container still ships both. Semantics: fork bindShared($a,$c) = bind($a, share($c), true); singleton($a,$c) = bind($a,$c,true). The share() wrapper is a redundant static-var memoization on top of the shared-instance cache — dropping it converges to v13 behavior. Fork suite green (1646, 0 fail). bindShared()/share() methods are KEPT in the container (app service providers still call them until the app matched-pair conform); they go with the container swap in the atomic window. The Foundation\Application BindingResolutionException import redirect is also deferred to the window (fork concrete extends \Exception, not the Contracts type). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ask 4.1, SCC-1 container-prep)
Second prep slice for the container swap: v13 illuminate/container has no share().
The 15 legacy `$this->app['key'] = $this->app->share($closure)` bindings (Events,
Routing x4, CachedRouting, Exception x6, Mail x3) are the L4.0 idiom where share()
memoizes a closure via a static var and offsetSet binds it non-shared. In v13
`$app['key'] = $closure` binds NON-shared, so the singleton must be explicit:
rewritten to `$this->app->singleton('key', $closure)`.
View Factory's own share() (view-data sharing, different API) is untouched.
Fork suite green (1646, 0 fail).
Missed in the bindShared sweep because an rtk-proxied grep wrongly reported zero
->share( callsites; re-verified via `rtk proxy grep`.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…13 (task 4.1, SCC-1 window) First SCC-1 core member cut over to a real v13 package. illuminate/container:^13 depends only on contracts (already ^13 from the seed phase), so it flips independently ahead of the support-gated remainder of the window. - composer.json: illuminate/container ^13 -> require, removed from replace. - Deleted fork src/Illuminate/Container/ tree (v13 package shadows it via the longer Illuminate\Container\ PSR-4 prefix; concrete classes now vendored). - Foundation\Application: BindingResolutionException import -> Contracts (v13 moved it there; docblock-only @throws, no runtime path). - tests/Container/ deleted (157 tests): these unit-test the container itself, now a vendored package tested upstream — the fork must not re-test a dependency. - tests/{Foundation,Mail,Exception}: bindShared()/share()/exception refs adapted. Application extends v13 Container with no signature break (make/bound/extend overrides compatible; verified via isolated class_exists probes). Fork suite green (1489, 0 fail; -157 from the removed container tests). composer.lock is gitignored. Prep landed earlier this branch: bindShared() sweep (6942197), share() sweep (f1fff79). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ask 4.1, container swap) illuminate/container v13 dropped the L4 bindShared()/share() API. Fork src already moved to singleton() (commits 6942197/f1fff797), but third-party & vendor-fork service providers still call them on the app at boot and can't all be patched (tomgrohl/laravel4-php71-encrypter is third-party packagist). Re-expose both as thin BC shims on Foundation\Application (which extends the v13 container): bindShared($a,$c) => singleton($a,$c); share() returns the memoizing closure. Unblocks boot for spatie/laravel-blade-x, laracasts/commander, tomgrohl/laravel4-php71-encrypter, barryvdh/laravel-ide-helper. Transitional — remove at the Foundation swap (task 4.5). Fork suite green (1489). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…filesystem+redis+database+bus+pipeline to illuminate/*:^13 (task 4.1, SCC-1 atomic remainder)
Completes the SCC-1 core cutover: the support-gated cluster swaps to real v13
packages in one window (they all hard-require illuminate/support:^13, which the
fork replaced — so none could move piecemeal).
Composer:
- require illuminate/{support,http,session,cache,cookie,encryption,events,bus,
filesystem,redis,database,pipeline}:^13; removed the 10 from replace.
- laravel/serializable-closure ^1.2 -> ^2.0.10 (new floor forced by illuminate/database:^13).
- Transitive: brick/math, doctrine/inflector, fruitcake/php-cors, guzzle uri-template.
Fork src trees are LEFT on disk (not deleted): v13 shadows every path it ships via
the longer Illuminate\<Component>\ PSR-4 prefix; fork-only files (e.g. Support/Contracts,
Support helpers, ClassLoader) still resolve via the Illuminate\ fallback. Same seed
mechanism proven in 4.1a-d. Tree evaporation is deferred to task 4.4.
Fork code fixes (the entire real break surface — only 3):
- Foundation\Application::boot(): v13 ServiceProvider has no default boot() — guard
with method_exists and call via the container (keeps boot() method-injection).
- View\View: `instanceof MessageProviderInterface` used the L4 fork contract; v13
MessageBag implements Illuminate\Contracts\Support\MessageProvider — aliased to it.
- tests/CachedRouting: cache config to v13 shape (cache.stores.file + cache.default).
Deleted 63 fork tests for now-vendored components (Database/Cache/Http/Session/Cookie/
Encryption/Events/Filesystem + 4 vendored Support tests) — upstream-tested; the fork
must not re-test a dependency (container-swap precedent).
KNOWN CONSTRAINT: illuminate/bus is required by illuminate/events but its Dispatcher
deep-couples to v13 illuminate/queue (Attributes/*, InteractsWithQueue, Foundation\Bus)
which is NOT yet swapped (queue:^13 doesn't co-resolve — needs console). The fork has
zero references to Illuminate\Bus\, so Bus\Dispatcher never loads; it stays dormant
until the queue swap (task 4.3). L4.2-app uses laracasts/commander, not illuminate/bus.
Fork suite green (763; -726 = deleted vendored-component tests). All 12 components
verified loading from v13 vendor. composer.lock is gitignored.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…emainder)
v13 Support\ServiceProvider::commands() calls Illuminate\Console\Application::starting()
to defer command registration, but console is not swapped yet (still fork). App boot
fataled ("undefined method Console\Application::starting()") when a provider registered
commands. Add a static starting() that collects callbacks and fire them in make() with
the console instance (which already has resolveCommands()). Transitional — remove when
console swaps to v13 (task 4.2/4.3). Fork suite green (763).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…mands (task 4.1) v13 session/cache/etc. register console commands that extend v13 console base classes (MigrationGeneratorCommand, …) absent from the not-yet-swapped fork console, fataling artisan boot. Skip commands that fail to resolve (log + continue) so artisan boots; commands that load fine (migrate, queue, app) still register. Transitional — the skipped generator commands return with the console swap (task 4.2). Fork suite green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…rtisan boots (task 4.1) console:^13 can't be swapped yet (hard-requires view:^13 = a large Blade migration, task 4.3). But v13 session/cache/database ship console commands that extend v13 console classes absent from the fork console, fataling artisan boot at class-declaration: - Illuminate\Console\MigrationGeneratorCommand (make:session-table, make:cache-table) - Illuminate\Console\Prohibitable trait (migrate:fresh/refresh/reset) Add minimal fork-console shims so those commands load and artisan boots (unblocking the deploy pipeline: composer install -> artisan clear-compiled/optimize). Generation itself is out of scope until the console swap; combined with the resilient resolveCommands(), unloadable/unnamed commands are skipped. Transitional — remove at the console swap (task 4.2). Fork suite green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… commands load (task 4.1) v13 database/session/cache console commands declare `#[\Override] configureDefaults()` against the v13 console Command; the fork console Command lacks it, so the Override attribute is an uncatchable compile fatal at class declaration (not skippable via resolveCommands). Add a no-op configureDefaults() so those classes load and artisan boots. The fork configures commands via its constructor instead. Transitional — remove at the console swap (task 4.2). Fork suite green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…Artisan facade (task 4.1) v13's Support\Facades\Artisan resolves Illuminate\Contracts\Console\Kernel, unbound in the fork (no console Kernel yet, task 4.2). Alias it to the console Application in make() so the facade resolves and artisan boots. Transitional. Fork suite green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…1 components (task 4.1)
registerCoreContainerAliases mapped 'redis' to the renamed-away Illuminate\Redis\Database
(v13 = RedisManager) and had no contract aliases for the swapped SCC-1 components, so v13
code type-hinting Contracts\{Events\Dispatcher,Redis\Factory,Cache\Factory,Cache\Repository,
Config\Repository} or Database\ConnectionResolverInterface failed to resolve. Fix the redis
alias and add the contract aliases. Fork suite green.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…\Manager (task 4.1) v13 Support\Manager renamed the base property $app -> $container. The fork AuthManager (Auth not swapped) still referenced $this->app -> 'Undefined property' at resolution. Sweep to $this->container (all uses are container ops v13 supports). Fork suite green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ask 4.1) The v13 Artisan facade resolves Illuminate\Contracts\Console\Kernel. The earlier alias lived only in Console\Application::make() (the php-artisan path), so Artisan::call() in integration tests (and web) still failed. 'artisan' is a lazy singleton, so alias the contract to it in registerCoreContainerAliases (runs in all contexts). Fork suite green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…task 4.1) registerDeferredProvider() called $instance->boot() unconditionally in the booting callback; v13 ServiceProvider has no default boot() (e.g. deferred CacheServiceProvider) -> 'undefined method boot()'. Guard with method_exists + call via the container, matching the eager boot() loop fix. Fork suite green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ask 4.1) v13 illuminate/support Facades\Mail resolves 'mail.manager', but the fork Mail component is unswapped and binds 'mailer'. Alias the two (and expose 'mail.manager' in provides()) so Mail::send() works after the SCC-1 support swap. Remove when Mail swaps to illuminate/mail:^13. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
v13 illuminate/database paginate()/simplePaginate() call Illuminate\Pagination\Paginator::resolveCurrentPage() and instantiate LengthAwarePaginator — classes absent from the L4.2 fork pagination tree (only Paginator/Factory/Presenter existed), causing 86 integration errors. Pagination was missed by the SCC-1 atomic swap. - composer: illuminate/pagination self.version(replace) -> ^13 (require) - delete the shadowed fork src/Illuminate/Pagination tree - drop the 'paginator' => Pagination\Factory core alias (no v13 equivalent; v13 uses static Paginator resolvers, and nothing resolves 'paginator') App consumes v13's PaginationServiceProvider (already registered by FQCN). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…1 tail) v13 PaginationServiceProvider::boot() (and other v13 providers) call $app->resourcePath(); the L4.2 fork Application lacks it -> fatal during console boot after the pagination swap. Minimal shim off path.base. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…Token() v13 illuminate/session Store renamed getToken() -> token(); the fork's csrf_token() helper and Html FormBuilder still called getToken(), fataling in every view that renders a CSRF field (~401 integration failures). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…test mode v13 Request::convertUploadedFiles() re-wraps each upload via UploadedFile::createFromBase() with test=false, so files posted through the BrowserKit test client fail isValid()/mimes validation. Return Illuminate\Http\UploadedFile instances so createFromBase's instanceof check preserves the test flag. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Remove illuminate/view from replace + require illuminate/view:^13 (pulls pagination v13.32.0 too). v13 view shadows the fork View tree via PSR-4 (Illuminate\View\ > Illuminate\); tree left on disk (evaporates at 4.4). Deleted tests/View + tests/Pagination (vendored-component tests, same policy as tests/Container at 4.1). Fixed SupportUtilTest paginator ctor to v13 signature (items,perPage) — Util is fork-only, test is legit. Suite 602 green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…iceProvider (task 4.3) v13 ServiceProviders (view flushes Blade Component cache) register terminating callbacks; fork Foundation predates the API. Store + run them in terminate(). ponytail shim, remove at task 4.5 foundation swap.
… 4.3) v13 view internals (anonymous component rendering) resolve the Factory contract from the container; alias it to the core 'view' binding like the other SCC-1 contract aliases.
…k 4.3) v13 code resolves the container statically via Container::getInstance() (e.g. BladeCompiler::anonymousComponentPath); the fork bound $this only under the class key, never static setInstance(), so getInstance() returned a bare Container with no bindings/aliases. Call static::setInstance($this) in registerBaseBindings. Fork suite 602 green.
…13 (task 4.3) v13 component rendering autowires Contracts\Foundation\Application and the container contracts; mirror v13's 'app' alias cluster.
… (task 4.3) v13 ComponentTagCompiler calls Application::getNamespace() to locate class components; the app uses only anonymous components so return a benign 'App\' default. ponytail shim, remove at task 4.5.
- composer: drop illuminate/console from replace, require illuminate/console:^13 (pulls laravel/prompts + nunomaduro/termwind); v13 Console\* shadows fork tree via PSR-4, so the 5 console BC shims go dead (removed at task 4.4/4.5). - Foundation\Artisan::getArtisan() rewired: v13 Console\Application self-bootstraps in its ctor (Container, Dispatcher, version) and has no make()/start()/boot() — so rebind 'artisan' to the console + load start/artisan.php inline (until Foundation Kernel lands at 4.5). - fire() -> handle() on the 22 surviving fork console commands (Foundation/Console 17, Auth/Console 3, Routing/Console 1, Workbench 1) + command.stub; v13 Command::execute() resolves handle() via container, not the old fire() fallback. - tests: fixed 5 fork command tests (setLaravel a Foundation\Application w/ env bound, since v13 Command::run() calls runningUnitTests()); deleted 2 vendored-behavior tests (ConsoleApplicationTest, FoundationArtisanTest — assert old fork Console internals). Fork suite 595 green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Surfaced by app-side artisan boot-smoke (fork suite couldn't catch — no app):
- Foundation\Artisan::getArtisan(): call $app->boot() before building the console
(the old Console\Application::make() did; provider boot()s register runtime
extensions like the app's Auth::extend('dicoding-auth') that command resolution needs),
and setContainerCommandLoader() after (v13 registers #[AsCommand] commands lazily into
a commandMap — without the loader, illuminate/database's migrate family is invisible).
- Foundation\Application::basePath(): v13 database MigrationServiceProvider calls it.
- 'composer' binding -> illuminate/support Composer (v13 moved it there; MigrateMakeCommand
type-hints Support\Composer); fork Optimize/AutoloadCommand retyped to match.
artisan list now clean: 191 commands incl. full migrate family + queue:work.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… (task 4.2) v13 Support\Composer::dumpAutoloads()/dumpOptimized() return an int exit code, not a Process — the fork command only used the result for a cosmetic 'Executed: ...' info line. Fixes fatal in 'artisan optimize' (composer post-update hook). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…gister path) Application::register() booted a provider registered after boot via a bare `$provider->boot()` (line 378), unguarded. v13 ServiceProviders have no default boot(), so a DEFERRED provider resolved post-boot (e.g. Illuminate\Redis\ RedisServiceProvider, triggered whenever redis is resolved — oauth token store, cache) fatals: "Call to undefined method RedisServiceProvider::boot()", surfacing as a silent Symfony 500 (no app log). Mirror boot()'s guard: method_exists + container-call. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
agissept
force-pushed
the
pre-release/4.2.101
branch
from
September 24, 2026 07:59
f7df57a to
90bf560
Compare
v13 illuminate/console Command::execute() resolves handle() or __invoke(), dropping L4.2's fire(). The fork queue console commands (still self.version) kept fire(), so v13 fell back to __invoke() -> BoundMethod "__invoke() does not exist" on queue:listen/work/retry/etc. Rename fire()->handle() to match the v13 idiom the app-side sweep already applied to app commands. Also drop ListFailedCommand's removed-Symfony 'table' HelperSet call in favour of the v13 Command::table() helper (the old path only surfaced now that the command actually reaches its body). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
agissept
force-pushed
the
pre-release/4.2.102
branch
from
September 26, 2026 03:17
4fd1d85 to
1d35c43
Compare
… (task 4.2) getArtisan() binds the v13 console as 'artisan' then require's start/artisan.php, which calls Artisan::add() ~149x. The Artisan facade has already cached this Foundation\Artisan wrapper, so each add() re-enters __call()->getArtisan(); with $this->artisan memoized only at the end, every re-entry re-boots and re-requires artisan.php -> unbounded recursion -> OOM (observed ~22GB) on any Artisan::call in tests/runtime. Memoize the console before the require so re-entry short-circuits and add() forwards to the console instance. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
agissept
marked this pull request as draft
September 26, 2026 04:52
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacks on #72 (4.2.101 view swap). Task 4.2: swap
illuminate/consoleto the real v13 package.What
illuminate/consolefromreplace,require illuminate/console:^13(pulls laravel/prompts + nunomaduro/termwind). v13Illuminate\Console\*shadows the fork tree via PSR-4 → the 5 old console BC shims go dead (removed at 4.4/4.5).Foundation\Artisan::getArtisan()— v13Console\Application(Container, Dispatcher, version)self-bootstraps in its ctor and has nomake()/start()/boot(). New flow:loadDeferredProviders → $app->boot() → new Console\Application → instance('artisan') → load start/artisan.php → setContainerCommandLoader().Application::basePath(); rebind'composer'→ v13Support\Composer(retype fork Optimize/AutoloadCommand); OptimizeCommand dropsProcess::getCommandLine()(v13 Composer dump* return int).fire()→handle()on the 22 surviving fork console commands +command.stub.Command::run()needs aFoundation\Applicationlaravel w/envbound); deleted 2 vendored-behavior tests.Two non-obvious gotchas
setContainerCommandLoader()is mandatory — v13 registers#[AsCommand]commands lazily into a commandMap; without the loader, illuminate/database's whole migrate family + queue:work are silently invisible (eager L4.2-style commands mask it).$app->boot()before building the console — provider boot()s register runtime extensions (the app'sAuth::extend('dicoding-auth')) that command resolution needs.Verify
Fork suite 595 green. App-side (dicoding 4.2.102-rc1): artisan
list=191 cmds incl. full migrate family + queue:work,optimize/envrun clean, unit 8367 green.🤖 Generated with Claude Code